/**
 * SPDX-FileCopyrightText: 2023-2025 Sangfor Technologies Inc.
 * SPDX-License-Identifier: Mulan PSL v2
 */
/**
 * Created by hjh on 2019/10/14.
 * 将 pcss 中的 :root 映射表转成 js 的。转换完后会自动计算 var，得出最终的结果
 */

/* eslint-disable */

/**
 * 将一个 map 中的 var 值计算转换成最终的值。返回计算好的 map
 * @params {Object} themeMap 转换前的 map
 * @returns {Object} themeMap 转换后的 map
 * */
function parseMap (themeMap = {}) {
    let reg = /var\(([^\)]*)\)/g;
    let needParse = false;

    for (let key in themeMap) {
        if (!themeMap.hasOwnProperty(key)) {
            continue;
        }

        if (reg.test(themeMap[key])) {
            themeMap[key] = themeMap[key].replace(reg, str => {
                let varKey = str.replace(reg, '$1');
                return themeMap[varKey];
            });
        }

        if (reg.test(themeMap[key])) {
            needParse = true;
        }
    }

    return needParse ? parseMap(themeMap) : themeMap;

}

/**
 * 将 pcss 的内容字符串转换成 js 的 Map 对象（未做 var 变换计算）
 * @params {String} string
 * @returns {Object}
 * */
function parseCSS2JSMap (string) {
    let themeMap = {};

    // 匹配里头的 {} 内容
    string = string.replace(/^[^\{]+(\{[\s\S]+\})[^\}]*$/, '$1');

    // 转换成可用的 {} 对象
    string = string.replace(/(\'|\")/g, '\\$1'); // 将引号或双引号加 \
    string = string.replace(/([\w\-\_\$]+)\s*:\s*([^;]+);/g, '\"$1\":\"$2\";'); // 将 key:value 改成 “key”:"value"
    string = string.replace(/;/g, ',');

    eval(`themeMap = ${string}`);

    return themeMap;
}

/**
 * 将 pcss 的内容字符串转换成 themeMap 对象（已做 var 变换计算）
 * @params {String} string
 * @returns {Object}
 * */
function parseCSS2ThemeMap(string) {
    return parseMap(parseCSS2JSMap(string));
}

export {
    parseMap,
    parseCSS2JSMap,
    parseCSS2ThemeMap
};
